package com.tanhua.server.controller;

import com.tanhua.model.domain.PageResult;
import com.tanhua.model.mongo.Movement;
import com.tanhua.model.vo.MovementsVo;
import com.tanhua.server.service.CommentService;
import com.tanhua.server.service.MovementsService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;

//朋友圈动态
@RestController
@RequestMapping("/movements")
public class MovementsController {


    @Autowired
    private MovementsService movementsService;

    @Autowired
    private CommentService commentService;

    /**
     * 发布动态：
     * 请求路径：/movements
     * 请求方式：post
     * 请求参数：Movements对象（好友动态详情），imageContent（图片）
     * 响应数据：null
     */

    @PostMapping                    //表单的方式提交，不需要要@RequestBody注解转换
    public ResponseEntity publishMoments(Movement movement, MultipartFile[] imageContent) throws IOException {

        //1.接收参数，调用MovementsService完成动态发布
        movementsService.publishMoments(movement,imageContent);

        //2.响应数据;
        return ResponseEntity.ok(null);
    }


    /**
     * 查看自己发布的动态:
     * 请求路径：/movements/all
     * 请求方式：get
     * 请求参数：page，pagesize，userId
     * 响应数据：PageResult里面的数据封装的是MovementsVo
     */


    @GetMapping("/all")
    public  ResponseEntity lookMyMoments(@RequestParam(defaultValue = "1") Integer page,
                                         @RequestParam(defaultValue = "10") Integer pagesize,
                                         Long userId){

        PageResult pageResult = movementsService.lookMyMoments(page,pagesize,userId);

        return ResponseEntity.ok(pageResult);

    }

    /**
     * 查看好友动态
     * 1.请求路径：：/movements
     * 2.请求方式：get
     * 3.请求参数：page,当前页码；pagesize，每页展示数
     * 4.响应数据：PageResult
     */

    @GetMapping
    public ResponseEntity viewSocialUpdates(@RequestParam(defaultValue = "1") Integer page,
                                            @RequestParam(defaultValue = "10") Integer pageSize){

        //1.接收参数，调用业务层完成查询
       PageResult pageResult = movementsService.viewSocialUpdates(page,pageSize);

       //2.构造返回值
        return ResponseEntity.ok(pageResult);
    }


    /**
     * 查看推荐动态:
     * 1.请求路径：/movements/recommend
     * 2.请求方式：get
     * 3.请求参数:page,当前页码；pageSize，每页展示数
     * 4.响应数据：MovementsVO
     */

    @GetMapping("/recommend")
    public ResponseEntity lookRecommendMoments(@RequestParam(defaultValue = "1") Integer page,
                                               @RequestParam(defaultValue = "10") Integer pageSize ){

        //1.调用业务层完成业务逻辑
        PageResult pageResult = movementsService.lookRecommendMoments(page,pageSize);
        //2.构造返回值
        return ResponseEntity.ok(pageResult);

    }


    /**
     * 根据动态详情对象的id查询单条用户动态:
     * 请求路径：/movements/:id
     * 请求方式：get
     * 请求参数：路径参数id，动态id
     * 响应数据：MovementsVo
     */
    @GetMapping("/{id}")
    public ResponseEntity lookOneMoment(@PathVariable("id") String id){
        //1.调用业务层完成业务逻辑
      MovementsVo movementsVo =  movementsService.lookOneMoment(id);
        //2.构建返回数据
        return ResponseEntity.ok(movementsVo);
    }




    /**
     * 动态点赞:
     * 请求路径：/movements/:id/like
     * 请求方式：get
     * 请求参数：路径参数id,动态id
     * 响应数据：	integer
     */
    @GetMapping({"/{id}/like"})
    public ResponseEntity like(@PathVariable("id") String id){
       Integer integer = commentService.like(id);
       return ResponseEntity.ok(integer);
    }


    /**取消点赞：
     * 请求路径：/movements/:id/dislike
     * 请求方式：get
     * 请求参数：路径参数id,动态id
     * 响应数据：    Integer
     */
    @GetMapping("/{id}/dislike")
    public ResponseEntity disLike(@PathVariable("id") String id){
        Integer count = commentService.disLikeComment(id);
        return ResponseEntity.ok(count);
    }


    /**
     * 动态喜欢：
     * 请求路径：/movements/:id/love
     * 请求方式：get
     * 请求参数：路径参数id(动态id)
     * 响应数据：    Integer
     */

    @GetMapping("/{id}/love")
    public ResponseEntity loveMovement(@PathVariable("id") String movementId){
       Integer count =  commentService.saveLoveMovement(movementId);
       return ResponseEntity.ok(count);
    }


    /**
     * 动态取消喜欢：
     * 请求路径：/movements/:id/unlove
     * 请求方式：get
     * 请求参数：路径参数id(动态Id)
     * 响应数据：    Integer
     */

    @GetMapping("/{id}/unlove")
    public  ResponseEntity unLove(@PathVariable("id") String movementId){
      Integer count =  commentService.unLOve(movementId);

      return ResponseEntity.ok(count);
    }
}
